Сравнение if и switch

Выбор между if и switch зависит от типа условия, которое вы проверяете. Оба инструмента решают похожие задачи, но используются в разных сценариях.

Когда использовать if

Используйте if и else if, когда:

  • Проверяете диапазоны значений

    if (score >= 90) {
      grade = "A";
    } else if (score >= 80) {
      grade = "B";
    } else if (score >= 60) {
      grade = "C";
    }
    
  • Используете логические операции (&&, ||, !)

    if (isLoggedIn && user.role === "admin" && !user.banned) {
      showAdminPanel();
    }
    
  • Условия не сводятся к одному значению — например, проверка наличия данных, состояния сети, времени суток

    if (date.getHours() >= 6 && date.getHours() < 12) {
      setMessage("Доброе утро!");
    }
    
  • Значения динамические или вычисляемые — switch не может работать с выражениями в case.

Когда использовать switch

Используйте switch, когда:

  • Проверяете одну переменную на равенство конкретным, дискретным значениям — например, строковым ключам, числам, enum-значениям

    switch (notificationType) {
      case "info":
      case "success":
        showBanner("Сообщение", "blue");
        break;
      case "warning":
        showBanner("Предупреждение", "orange");
        break;
      case "error":
        showBanner("Ошибка", "red");
        break;
    }
    
  • У вас есть перечисление возможных состояний — язык интерфейса, тип уведомления, статус заказа, режим приложения

    switch (appTheme) {
      case "light":
      case "dark":
      case "system":
        applyTheme(appTheme);
        break;
    }
    
  • Код должен быть структурирован и легко расширяться — добавление нового case не нарушает логику остальных веток.

Производительность

  • В современных движках JavaScript (V8, SpiderMonkey) разница в производительности между if и switch минимальна — особенно при небольшом количестве условий.
  • Для большого числа вариантов (например, 10+ дискретных значений) switch может быть чуть быстрее, потому что внутренне использует таблицу переходов (jump table), а не последовательные проверки.
  • Но в реальных веб и мобильных приложениях эта разница не имеет значения — важнее читаемость и поддерживаемость.

Читаемость

  • switch лучше читается, когда вы видите список возможных значений — как меню.
  • if лучше читается, когда вы видите логические правила — как условия в форме.

Пример читаемого switch:

switch (buttonAction) {
  case "save":
    saveData();
    break;
  case "cancel":
    closeModal();
    break;
  case "delete":
    confirmDelete();
    break;
}

Пример читаемого if:

if (isOffline && hasUnsavedChanges) {
  showSavePrompt();
} else if (!isOffline && !hasUnsavedChanges) {
  hideNotification();
}

Рекомендация

  • Используйте switch для перечислений — когда у вас есть фиксированный набор значений.
  • Используйте if для логики — когда нужно проверять диапазоны, комбинации, условия с && или ||.
  • Не гонитесь за «красивым» кодом — выбирайте то, что понятнее вашей команде.
  • Если вы сомневаетесь — выбирайте if. Он универсален. switch — специализированный инструмент.